# assistant/llm_agent.py
import os
import requests
from typing import Dict
from dotenv import load_dotenv

#加载 .env 环境变量
load_dotenv()

#模型参数配置（默认使用 Ollama）
OLLAMA_BASE_URL = os.getenv("OPENAI_API_BASE", "http://localhost:11434")
OLLAMA_MODEL_NAME = os.getenv("BASE_MODEL", "deepseek-r1:7b")
TEMP = float(os.getenv("DEFAULT_TEMPERATURE", 0.7))
TIMEOUT = int(os.getenv("DEFAULT_TIMEOUT", 30))

print(f"🔑 LLM init (Ollama) | model = {OLLAMA_MODEL_NAME} @ {OLLAMA_BASE_URL}")

#系统提示词
_SYSTEM_PROMPT = (
    "你是一名智能商品推荐助手，请根据用户画像、历史购买记录和商品信息，生成一段简洁明了的推荐理由，约2到4句话。"
    "内容要简短、自然且有说服力，用中文表达，不要包含思考过程，不要使用<think>标签。"
)

#生成推荐理由（过滤 <think>... 内容）
def generate_reason(user_summary: str, product: Dict) -> str:
    try:
        prompt = f"{_SYSTEM_PROMPT}\n用户画像：{user_summary}\n商品信息：{product}"
        response = requests.post(
            f"{OLLAMA_BASE_URL}/api/generate",
            json={
                "model": OLLAMA_MODEL_NAME,
                "prompt": prompt,
                "temperature": TEMP,
                "stream": False
            },
            timeout=TIMEOUT
        )
        response.raise_for_status()
        result = response.json()
        content = result.get("response", "").strip()

        #删除 <think> 思考部分，仅保留正式理由
        if "<think>" in content and "</think>" in content:
            content = content.split("</think>")[-1].strip()

        return content
    except Exception as e:
        print("LLM error:", e)
        return "这款商品符合你的偏好和预算，值得推荐。"
